//package com.sunnada.poi.excel.uitl;
//
//import com.sunnada.poi.bean.User;
//import com.sunnada.poi.excel.base.StyleBase;
//import org.apache.poi.hssf.usermodel.HSSFSheet;
//import org.apache.poi.hssf.usermodel.HSSFWorkbook;
//import org.apache.poi.ss.formula.functions.T;
//import org.apache.poi.ss.usermodel.*;
//import org.apache.poi.ss.util.CellRangeAddress;
//import org.junit.jupiter.api.Test;
//
//import java.io.*;
//import java.lang.reflect.Field;
//import java.lang.reflect.InvocationTargetException;
//import java.lang.reflect.Method;
//import java.util.*;
//
///**
// * @BelongsProject: poiextended
// * @BelongsPackage: com.sunnada.poi.excel
// * @Author: 李瑞益
// * @CreateTime: 2018-10-17 21:01
// * @Description: 导出为Excel
// */
//public class ExportExcel {
//
//    /**
//     * 获取实体类对象的属性名数组
//     *
//     * @param obj
//     * @return 属性名数组
//     */
//    public static String[] getFieldName(Object obj) {
//        Field[] fields = obj.getClass().getDeclaredFields();
//        String[] fieldsNames = new String[fields.length];
//        for (int i = 0; i < fields.length; i++) {
//            fieldsNames[i] = fields[i].getName();
//            System.out.println("name:" + fieldsNames[i]);
//            System.out.println("type:" + fields[i].getType());
//        }
//        return fieldsNames;
//    }
//
//    /**
//     * 写出到Excel
//     * @param filePath 写出的目标路径
//     * @param workbook 工作簿高级对象
//     */
//    public static  void write2Excel(String filePath, Workbook workbook) {
//        //写出到xls
//        File file = new File(filePath);
//        try {
//            if (!file.exists()) {
//                file.createNewFile();
//            }
//            OutputStream os = new BufferedOutputStream(new FileOutputStream(file));
//            System.out.println(file.getAbsoluteFile());
//            workbook.write(os);
//            os.close();
//            workbook.close();
//            System.out.println("数据已写出到："+file.getAbsolutePath());
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//
//    public static  void builderExcelData(Sheet sheet, List<User> list, Map<String, String> headerNameMap, StyleBase s) {
//
//        int rowIndex = s.getMergeRowCount();
////        Sheet sheet = s.getSheet();
//        for (Object obj : list) {
//            if (rowIndex == (65535 - s.getMergeRowCount()) || rowIndex == s.getMergeRowCount()) {
//                if (rowIndex != s.getMergeRowCount())//不在同一页则创建新一页
//                    sheet = s.getWorkbood().createSheet("1");
//                //每一页的第一行
//                //插入标题
//                Row headerRow = sheet.createRow(s.getMergeRowCount());
//
//                int hi = 0;//表头开始索引（横向）
//                for (Map.Entry<String, String> entry : headerNameMap.entrySet()) {
//                    headerRow.createCell(hi).setCellValue(entry.getValue());
//
//                    //设置列宽
//                    int headerByteLength = entry.getKey().getBytes().length;
//                    //sheet.setColumnWidth(hi, (headerByteLength ) * 256+headerByteLength*320);//以字符的1/256设置的
//                    //sheet.setColumnWidth(hi,headerByteLength*2*256);//没用
//                    //sheet.autoSizeColumn(hi);//没用
//                    //sheet.setColumnWidth(hi,16*256+184);
//                    //sheet.setColumnWidth(hi,entry.getKey().length()*512);
//                    headerRow.getCell(hi).setCellStyle(s.getHeaderStyle());
//                    hi++;
//                    System.out.print(entry.getValue() + "\t");
//                }
//                rowIndex += 1;
//            }
//            System.out.println();
//            Row row = sheet.createRow(rowIndex);
//            Set<Map.Entry<String, String>> set = headerNameMap.entrySet();
//            int j = 0;
//            for (Map.Entry<String, String> entry : set) {
//                setCellValue(row.createCell(j), obj, entry.getKey());
//                row.getCell(j).setCellStyle(s.getContentStyle());
//                j++;
//            }
//            rowIndex++;
//            System.out.println();
//        }
//    }
//
//    /**
//     * 设置合并单元格后的单元格值
//     * @param sheet 对应的sheet页
//     * @param cellAddresses 合并单元格对象
//     * @param value 要设置的值
//     * @return
//     */
//    public static  Cell setMergeCellValue(Sheet sheet, CellRangeAddress cellAddresses, Object value){
//        Cell cell = sheet.createRow(cellAddresses.getFirstRow()).createCell(cellAddresses.getFirstColumn());
//        cell.setCellValue(value.toString());
////        cell.setCellStyle(style.getHeaderStyle());
//        return cell;
//    }
//
//    /**
//     * 设置单元格的值
//     * @param cell 单元格对象
//     * @param obj 实体类
//     * @param fieldName 对应实体类属性的表头名（字段名或属性名）
//     */
//    private static void setCellValue(Cell cell, Object obj, String fieldName) {
//        //当title为null时
//        //不会null时
//        String methodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
//        Class aClass = obj.getClass();
//        Method[] methods = aClass.getClass().getDeclaredMethods();//获取方法集合
//        try {
//            Method getMethod = aClass.getMethod(methodName, new Class[]{});//通过名字获取到方法
//            Object invokeValue = getMethod.invoke(obj, new Object[]{});
//            String value;
//            if (invokeValue != null) {
//                value = String.valueOf(invokeValue);
//            } else {
//                value = null;
//            }
//            cell.setCellValue(value);
//            System.out.print(value + "\t");
//        } catch (IllegalAccessException e) {
//            e.printStackTrace();
//        } catch (InvocationTargetException e) {
//            e.printStackTrace();
//        } catch (NoSuchMethodException e) {
//            e.printStackTrace();
//        }
//    }
//}
